package view;

import java.text.DecimalFormat;
import java.util.List;

import javax.swing.table.AbstractTableModel;

import model.Material;



/**
 * Esta clase representa el modelo de la tabla que se utiliza para listar todos los materiales 
 * y seleccionar uno a modificar.
 *
 */
@SuppressWarnings("serial")
public class ModificarMaterialesTableModel extends AbstractTableModel  {
	private static final int SELECCIONADO = 0;
	private static final int CODIGO = 1;
    private static final int NOMBRE = 2;
    private static final int COSTO = 3;
    private static final int STOCK = 4;
	
    /** lista que contiene los materiales */
	private List<Material> materiales;
    private Material materialSeleccionado;
    
    final static String[] columnNames = {"Seleccionado", "Codigo", "Nombre", "Costo", "Cantidad"};
    
    boolean isEditable = true;

    public ModificarMaterialesTableModel(List<Material> materiales) {
        this.materiales = materiales;
    }

    public String getColumnName(int col) {
        return columnNames[col];
    }

   public int getRowCount() {
        return materiales.size();
    }

    public int getColumnCount() {
        return columnNames.length;
    }

    public Object getValueAt(int row, int col) {
        Object result = null;
        Material material = materiales.get(row);
        switch (col) {
            case SELECCIONADO:
                result = material.isSelected();
                break;
            case CODIGO:
                result = material.getCodigo();
                break;
            case NOMBRE:
            	result = material.getNombre();
            	break;
            case COSTO:
            	DecimalFormat df = new DecimalFormat();
            	df.setMaximumFractionDigits(2);
                result = df.format(material.getCosto());
                break;
            case STOCK:
                result = material.getCantidadStock();
                break;
        }
        return result;

    }
    
    @SuppressWarnings({ "unchecked", "rawtypes" })
	public Class getColumnClass(int c) {
    	if(c == SELECCIONADO){
    		return Boolean.class;
    	}
    	
        return String.class;
    }
    
    public void setMateriales(List<Material> materiales) {
		this.materiales = materiales;
		fireTableRowsInserted(materiales.size(), materiales.size());
	}
    
    public boolean isCellEditable(int row, int col) {
    	if(col == SELECCIONADO){
    		return true;
    	}
        return false;
    }
    
    public void setEditable(boolean isEditable){
        this.isEditable = isEditable;
    }

    public void setValueAt(Object value, int row, int col) {
        Material material = materiales.get(row);

        switch (col) {
	        case SELECCIONADO:
        		if (materialSeleccionado != null)
        			materialSeleccionado.setSelected(false);
	        	Boolean selected = (Boolean)value;
	            material.setSelected(selected);
	            materialSeleccionado = material;
	            break;       
        }
        
        fireTableDataChanged();
    }
    
    public Material getMaterialSeleccionado() {
    	return materialSeleccionado;
    }
}
